home *** CD-ROM | disk | FTP | other *** search
/ BBS Toolkit / BBS Toolkit.iso / maximus / mul100.zip / CALLSTAT.SCR < prev    next >
Text File  |  1993-02-01  |  9KB  |  209 lines

  1.  
  2. // CALLSTAT.SCR  --  Maximus Call Statistics Report  --  Version 1.00
  3. //
  4. // Script program for MUL - the Maximus User Language
  5. // MUL is (C) Copyright 1990-93 by CodeLand Australia
  6.  
  7. // CALLSTAT scans the Maximus USER.BBS file, and writes an 'avatar'
  8. // *.BBS file for online display.
  9.  
  10. char *rfile = "CALLSTAT.BBS";               // Path & name of report file
  11. char *ufile = "USER.BBS";                   // Path & name of Maximus user file
  12. //char *ufile = "C:\\BBS\\USER.BBS";        // Path & name of Maximus user file
  13.  
  14. char *banner = "CALLSTAT v1.00";            // Script banner
  15. char *desc = "Call Statistics Reporter";    // Description
  16. char MCLS=0x0C;                             // Avatar 'clear screen'
  17. char MENTER=0x01;                           // Maximus 'press enter'
  18. char MMOREOFF=0x0B;                         // Maximus 'more off'
  19.  
  20. int lastcall=0;                             // Last call <30 count
  21. int C[11];                                  // Calls data array
  22. long fp;                                    // Report file handle
  23.  
  24. main ()                                     // Main program
  25. {
  26.     printf ("\n%s - %s\n\n",banner,desc);   // Announce
  27.  
  28.     if (!BaseOpenR (ufile)) {
  29.         printf ("ERROR opening user file %s\n",ufile);
  30.         saybibi (); exit ();
  31.     }
  32.  
  33.     scanufile ();                           // Process the user file
  34.     writereport ();                         // Write the *.BBS file
  35.  
  36.     BaseClose ();                           // Close the user base
  37.     saybibi ();                             // Was it good for you too?
  38. }
  39.  
  40. scanufile ()                                // Collect data
  41. {
  42.     int i;
  43.  
  44.     printf ("Collecting the calls data     1");
  45.  
  46.     for (i=2;i<=BaseCount ();++i) {         // For all records
  47.         if (!BaseRead (i)) break;           // Read user record
  48.  
  49.         // Notify
  50.         if (!(i%20)) printf("%c%c%c%c%4u",8,8,8,8,i);
  51.  
  52.         // Update data array
  53.              if (USRcalls== 1                ) C[0]=C[0]+1;     //   1
  54.         else if (USRcalls>  1 && USRcalls< 10) C[1]=C[1]+1;     //   1 - 9
  55.         else if (USRcalls>  9 && USRcalls< 20) C[2]=C[2]+1;     //  10 - 19
  56.         else if (USRcalls> 19 && USRcalls< 30) C[3]=C[3]+1;     //  20 - 29
  57.         else if (USRcalls> 29 && USRcalls< 40) C[4]=C[4]+1;     //  30 - 39
  58.         else if (USRcalls> 39 && USRcalls< 50) C[5]=C[5]+1;     //  40 - 49
  59.         else if (USRcalls> 49 && USRcalls< 75) C[6]=C[6]+1;     //  50 - 74
  60.         else if (USRcalls> 74 && USRcalls<100) C[7]=C[7]+1;     //  75 - 99
  61.         else if (USRcalls> 99 && USRcalls<250) C[8]=C[8]+1;     // 100 - 249
  62.         else if (USRcalls>249 && USRcalls<400) C[9]=C[9]+1;     // 250 - 399
  63.         else                                   C[10]=C[10]+1;   // 400+
  64.  
  65.         // Last call less than 30 days count
  66.         if (BaseDaysLCall ()<30) ++lastcall;
  67.     }
  68.  
  69.     printf ("%c%c%c%c%4u\n",8,8,8,8,BaseCount ());  // End notify
  70. }
  71.  
  72. // AVAILABLE COLOUR CONSTANTS
  73. // Foreground & Background:
  74. // BLACK, BLUE, GREEN, CYAN, RED, MAGENTA, BROWN, LGREY
  75. // Foreground ONLY:
  76. // DGREY, LBLUE, LGREEN, LCYAN, LRED, LMAGENTA, YELLOW, WHITE
  77.  
  78. writereport ()                              // Write the .BBS report file
  79. {
  80.     char cbx1[5], cbx2[5], cbx3[5], cbx4[5];
  81.     char chd1[5], chd2[5], chd3[5], chd4[5];
  82.     char cbd1[5], cbd2[5], cbd3[5], cbd4[5];
  83.     char cgr1[5], cgr2[5], cgr3[5];
  84.  
  85.     fp=fopen (rfile,"wb");                  // Open report file
  86.     if (fp==NULL) return;
  87.  
  88.     printf ("Writing report file \"%s\" ",rfile);
  89.  
  90.     // Get avatar colour strings
  91.     strcpy (cbx1,Avt (YELLOW,BLACK)); strcpy (cbx2,Avt (LGREY,BLACK));
  92.     strcpy (cbx3,Avt (LCYAN,BROWN));  strcpy (cbx4,Avt (DGREY,BLACK));
  93.     strcpy (chd1,Avt (YELLOW,RED));   strcpy (chd2,Avt (LGREY,RED));
  94.     strcpy (chd3,Avt (LGREEN,BLACK)); strcpy (chd4,Avt (BROWN,LGREY));
  95.     strcpy (cbd1,Avt (LGREY,BROWN));  strcpy (cbd2,Avt (CYAN,BLACK));
  96.     strcpy (cbd3,Avt (LRED,BLACK));   strcpy (cbd4,Avt (WHITE,BLACK));
  97.     strcpy (cgr1,Avt (LCYAN,BLUE));   strcpy (cgr2,Avt (LBLUE,BLACK));
  98.     strcpy (cgr3,Avt (LGREEN,BLUE));
  99.  
  100.     fputc (MCLS,fp); fputc (MMOREOFF,fp);   // Output CLS and MoreOff
  101.  
  102.     fprintf (fp,"\n %s┌────────────────────────────────────────────────────────────────────────────┐\n",cbx1);
  103.     fprintf (fp," %s│ %s Caller Statistics Report       %sMUL v%s  -  the Maximus User Language   %s │\n",cbx1,chd1,chd2,VERSN,cbx1);
  104.     fprintf (fp," %s│%s┌──────────────────────────────────────────────────────────────────────────┐%s│\n",cbx1,cbx2,cbx1);
  105.     fprintf (fp," %s│%s│                                                     %s┌──────────────────┐%s │%s│\n",cbx1,cbx2,cbx3,cbx2,cbx1);
  106.     fprintf (fp," %s│%s│                  %sSystem Calls Graph                 %s│%s   System Calls   %s│%s │%s│\n",cbx1,cbx2,chd3,cbx3,chd4,cbx3,cbx2,cbx1);
  107.     fprintf (fp," %s│%s│ %s┌─   %s┌───────────────────────────────────────────┐%s  %s├──────────────────┤%s │%s│\n",cbx1,cbx2,cbx4,cgr1,cbx1,cbx3,cbx2,cbx1);
  108.  
  109.     // Line 11
  110.     fprintf (fp," %s│%s│ %s│%s100 %s┤%s ",cbx1,cbx2,cbx4,cgr2,cgr1,cgr3);
  111.     do_graphline (95,100);
  112.     fprintf (fp," %s│%s  %s│%s   1        %5u %s│%s %s│%s│\n",cgr1,cbx1,cbx3,cbd1,C[0],cbx3,cbx1,cbx2,cbx1);
  113.     // Line 10
  114.     fprintf (fp," %s│%s│ %s│    %s┤%s ",cbx1,cbx2,cbx4,cgr1,cgr3);
  115.     do_graphline (85,90);
  116.     fprintf (fp," %s│%s  %s│%s   2 -   9  %5u %s│%s %s│%s│\n",cgr1,cbx1,cbx3,cbd1,C[1],cbx3,cbx1,cbx2,cbx1);
  117.     // Line 9
  118.     fprintf (fp," %s│%s│ %s│%s 80 %s┤%s ",cbx1,cbx2,cbx4,cgr2,cgr1,cgr3);
  119.     do_graphline (75,80);
  120.     fprintf (fp," %s│%s  %s│%s  10 -  19  %5u %s│%s %s│%s│\n",cgr1,cbx1,cbx3,cbd1,C[2],cbx3,cbx1,cbx2,cbx1);
  121.     // Line 8
  122.     fprintf (fp," %s│%s│ %sU    %s┤%s ",cbx1,cbx2,cbd2,cgr1,cgr3);
  123.     do_graphline (65,70);
  124.     fprintf (fp," %s│%s  %s│%s  20 -  29  %5u %s│%s %s│%s│\n",cgr1,cbx1,cbx3,cbd1,C[3],cbx3,cbx1,cbx2,cbx1);
  125.     // Line 7
  126.     fprintf (fp," %s│%s│ %ss%s 60 %s┤%s ",cbx1,cbx2,cbd2,cgr2,cgr1,cgr3);
  127.     do_graphline (55,60);
  128.     fprintf (fp," %s│%s  %s│%s  30 -  39  %5u %s│%s %s│%s│\n",cgr1,cbx1,cbx3,cbd1,C[4],cbx3,cbx1,cbx2,cbx1);
  129.     // Line 6
  130.     fprintf (fp," %s│%s│ %se    %s┤%s ",cbx1,cbx2,cbd2,cgr1,cgr3);
  131.     do_graphline (45,50);
  132.     fprintf (fp," %s│%s  %s│%s  40 -  49  %5u %s│%s %s│%s│\n",cgr1,cbx1,cbx3,cbd1,C[5],cbx3,cbx1,cbx2,cbx1);
  133.     // Line 5
  134.     fprintf (fp," %s│%s│ %sr%s 40 %s┤%s ",cbx1,cbx2,cbd2,cgr2,cgr1,cgr3);
  135.     do_graphline (35,40);
  136.     fprintf (fp," %s│%s  %s│%s  50 -  74  %5u %s│%s %s│%s│\n",cgr1,cbx1,cbx3,cbd1,C[6],cbx3,cbx1,cbx2,cbx1);
  137.     // Line 4
  138.     fprintf (fp," %s│%s│ %ss    %s┤%s ",cbx1,cbx2,cbd2,cgr1,cgr3);
  139.     do_graphline (25,30);
  140.     fprintf (fp," %s│%s  %s│%s  75 -  99  %5u %s│%s %s│%s│\n",cgr1,cbx1,cbx3,cbd1,C[7],cbx3,cbx1,cbx2,cbx1);
  141.     // Line 3     
  142.     fprintf (fp," %s│%s│ %s│%s 20 %s┤%s ",cbx1,cbx2,cbx4,cgr2,cgr1,cgr3);
  143.     do_graphline (15,20);
  144.     fprintf (fp," %s│%s  %s│%s 100 - 249  %5u %s│%s %s│%s│\n",cgr1,cbx1,cbx3,cbd1,C[8],cbx3,cbx1,cbx2,cbx1);
  145.     // Line 2
  146.     fprintf (fp," %s│%s│ %s│    %s┤%s ",cbx1,cbx2,cbx4,cgr1,cgr3);
  147.     do_graphline (5,10);
  148.     fprintf (fp," %s│%s  %s│%s 250 - 399  %5u %s│%s %s│%s│\n",cgr1,cbx1,cbx3,cbd1,C[9],cbx3,cbx1,cbx2,cbx1);
  149.     // Line 1
  150.     fprintf (fp," %s│%s│ %s│%s  1 %s┤%s ",cbx1,cbx2,cbx4,cgr2,cgr1,cgr3);
  151.     do_graphlinelast (0,1);
  152.     fprintf (fp," %s│%s  %s│%s 400+       %5u %s│%s %s│%s│\n",cgr1,cbx1,cbx3,cbd1,C[10],cbx3,cbx1,cbx2,cbx1);
  153.  
  154.     fprintf (fp," │%s│ %s│    %s└─┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬─┘%s  %s│%s  Calls    Users  %s│%s │%s│\n",cbx2,cbx4,cgr1,cbx1,cbx3,cbd1,cbx3,cbx2,cbx1);
  155.     fprintf (fp," │%s│ %s│%s      1  2-9  10  20  30  40  50  75 100 250 400+  %s└──────────────────┘%s │%s│\n",cbx2,cbx4,cgr2,cbx3,cbx2,cbx1);
  156.     fprintf (fp," │%s│ %s└────────────────── %sCalls Logged %s────────────────┘                       %s│%s│\n",cbx2,cbx4,cbd2,cbx4,cbx2,cbx1);
  157.     fprintf (fp," │%s└ %sOut of a total of %s%4u%s accounts, %s%4u%s were accessed in the last  30 days %s┘%s│\n",cbx2,cbd3,cbd4,BaseCount (),cbd3,cbd4,lastcall,cbd3,cbx2,cbx1);
  158.     fprintf (fp," └────────────────────────────────────────────────────────────────────────────┘\n");
  159.  
  160.     // Press Enter prompt and CLS
  161.     fprintf (fp,"%s   %c",Avt (WHITE,BLACK),MENTER);
  162.     fprintf (fp,"%s%c",Avt (LGREY,BLACK),MCLS);
  163.  
  164.     putch ('\n');                           // End notify
  165. }
  166.  
  167. do_graphline (int val1, int val2)           // Plot a graph line
  168. {
  169.     int i;
  170.     char ch;
  171.  
  172.     for (i=0;i<10;++i) {
  173.         ch=' ';
  174.         if (C[i]>val1) ch='▄';
  175.         if (C[i]>val2) ch='█';
  176.         fprintf (fp,"%c   ",ch);
  177.     }
  178.     ch=' ';
  179.     if (C[10]>val1) ch='▄';
  180.     if (C[10]>val2) ch='█';
  181.     fputc (ch,fp);
  182. }
  183.  
  184. do_graphlinelast (int val1, int val2)           // Plot last graph line
  185. {
  186.     int i;
  187.     char ch;
  188.  
  189.     for (i=0;i<10;++i) {
  190.         ch='█';
  191.         if (C[i]==val1) ch=' ';
  192.         if (C[i]==val2) ch='▄';
  193.         fprintf (fp,"%c   ",ch);
  194.     }
  195.     ch='█';
  196.     if (C[10]==val1) ch=' ';
  197.     else if (C[10]==val2) ch='▄';
  198.     fputc (ch,fp);
  199. }
  200.  
  201. // Byebye
  202. saybibi ()
  203. {                             
  204.     puts ("\nCallStat done!\n");
  205. }
  206.  
  207. // End of script
  208.  
  209.